# -*- coding: utf-8 -*-
"""
进程节点 - 处理进程相关的异常指标
"""

import json
from typing import Dict, Any
from langchain_ollama import OllamaLLM
from Agent.utils import process_tool_2,process_tool_1

# 调用本地大模型
llm = OllamaLLM(base_url="http://127.0.0.1:11434", model="deepseek-r1:7b")


def processes_node(state: Dict[str, Any]) -> Dict[str, Any]:
    """进程节点：处理进程相关的异常指标"""
    print("进入processes_node")

    current_solution = state.get("current_solution", {})
    if not current_solution:
        print("没有接收到解决方案")
        return {"type": "end"}

    # 检查当前方案是否需要调用此节点
    nodes_to_call = current_solution.get("content", {}).get("nodes_to_call", [])
    if "processes_node" in nodes_to_call:
        print("根据解决方案，开始分析进程相关问题...")

        # 构建进程节点的提示词
        processes_prompt = f"""
        你是一个专门处理进程管理和监控问题的智能运维助手。

        你收到了以下来自boss节点的解决方案：
        {json.dumps(current_solution, indent=2, ensure_ascii=False)}

        请分析这个解决方案中与进程相关的内容，并决定：
        1. 是否需要执行进程相关的工具
        2. 如果需要，应该按什么顺序执行哪些工具
        3. 对每个工具执行的预期结果

        可用的进程工具包括：
        - process_tool_1: 进程监控工具
        - process_tool_2: 进程资源分析工具
        """

        # 调用LLM分析
        try:
            llm_response = llm.invoke(processes_prompt)
            print(f"进程节点LLM分析结果: {llm_response}")

            # 解析LLM响应（这里简化处理，实际应该解析JSON）
            if "true" in llm_response.lower() or "进程" in llm_response or "process" in llm_response.lower():
                print("LLM决定执行进程工具...")

                # 获取需要调用的工具
                tools_required = current_solution.get("content", {}).get("tools_required", {}).get("processes_node", [])

                for tool_name in tools_required:
                    if tool_name == "process_tool_1":
                        result = process_tool_1()
                        print(f"执行{tool_name}: {result}")
                    elif tool_name == "process_tool_2":
                        result = process_tool_2()
                        print(f"执行{tool_name}: {result}")

                print("进程节点处理完成")
            else:
                print("LLM决定不执行进程工具")

        except Exception as e:
            print(f"进程节点LLM调用失败: {e}")

        # 检查是否还有其他节点需要调用
        remaining_nodes = [node for node in nodes_to_call if node != "processes_node"]
        if remaining_nodes:
            return {"type": remaining_nodes[0]}
        else:
            return {"type": "end"}
    else:
        print("当前方案不需要调用进程节点")
        return {"type": "end"}